package com.arong.biBackend.config;

import org.jetbrains.annotations.NotNull;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.concurrent.*;

/**
 * 线程池配置类
 */
@Configuration
public class ThreadPoolExecutorConfig {

    @Bean
    public ThreadPoolExecutor threadPoolExecutor() {
        ThreadFactory threadFactory = new ThreadFactory() {

            // 初始化线程数为1
            private int count = 1;

            // 线程池创建新线程所用的方法
            @Override
            public Thread newThread(@NotNull Runnable r) {
                // 创建一个新的线程
                Thread thread = new Thread(r);
                // 给线程设置新的名字
                thread.setName("线程"+count);
                // 线程数递增
                count++;
                return thread;
            }
        };

        /**
         * 新建线程池，其中有七个参数：
         * 1. corePoolSize：核心线程数量
         * 2. MaximumPoolSize：最大线程数量， = 核心线程+空闲线程
         * 3. 4. keepAliveTime：空闲线程存活时间和单位
         * 5. Queue：消息队列，主要设置容量
         * 6. ThreadFactory：线程工厂，主要设置线程的名称等属性
         * 7. RejectExecutionHandler：拒绝策略
         */
        ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(
                2, 4, 100, TimeUnit.SECONDS,
                new ArrayBlockingQueue<>(4), threadFactory
        );
        return threadPoolExecutor;
    }

}
